package com.c3w.synchro.common.service;

import com.c3w.synchro.common.validation.event.DuplicateBeanException;
import com.c3w.synchro.common.validation.event.ValidationFailedException;

import java.util.List;

/**
 * User: magirard
 * Date: 12-10-18
 */
public interface CrudService <P> {
    /**
     * Fonction de création.
     *
     * @param pojo L'objet à créer.
     */
    P create(P pojo) throws DuplicateBeanException, ValidationFailedException;

    /**
     * @return La liste complète des objets.
     */
    List<P> list();

    /**
     * Va chercher l'objet qui correspond à la clé primaire.
     *
     * @param primaryKey La clé primaire.
     * @return L'objet correspondant.
     */
    P get(Long primaryKey);

    /**
     * Suppression de l'objet qui correspond à la clé primaire.
     *
     * @param primaryKey La clé primaire.
     * @return L'objet qui a été supprimé.
     */
    P delete(Long primaryKey);

    /**
     * Mise à jour de l'objet dans la couche de persistance.
     *
     * @param pojo L'objet qu'il faut sauvegarder.
     */
    P update(P pojo) throws ValidationFailedException;
}
